#include "chebychev.h"
#include "math.h"

Chebychev::Chebychev(int precision)
{
    double errorEsperado=5*pow(10, -(precision+1));
    double errorActual=100; // infinito
    int n=0;
    double a=PI;
    while(errorActual>errorEsperado)
    {
        n++;
        errorActual=1.0/fact(n+1)*pow(a/4.0, n)*1/pow(2.0,n);
    }
    this->cantidadNodos=n;
    this->nodos=new double[n];
    for(int k=1;k<n;k++)
    {
        //nodos[k]=a/4.0*(cos((2.0*k+1.0)/(2.0*n+2.0)*a)+1.0);
        //double valor=PI/4.0*(cos(2.0*k-1/(2.0*n)*PI)+1);
        double valor=(PI/4.0)*((cos((2.0*k+1)/(2.0*(n+1))*PI))+1.0);

        this->nodos[k-1]=valor;
    }

}
long Chebychev::fact(int num)
{
    long resultado=1;
    for(int i=num;i>0;i--)
    {
        resultado=resultado*i;
    }
    return resultado;
}
